ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং (Natural Language Processing - NLP) হলো কৃত্রিম বুদ্ধিমত্তার (AI) একটি শাখা, যা কম্পিউটার এবং মানুষের ভাষার মধ্যে সংযোগ স্থাপন করতে ব্যবহৃত হয়। এটি এমন প্রযুক্তি যা কম্পিউটারকে মানুষের ভাষা বুঝতে, প্রক্রিয়া করতে এবং প্রতিক্রিয়া জানাতে সক্ষম করে। NLP মেশিন লার্নিং, লিঙ্গুইস্টিকস, এবং কম্পিউটার সায়েন্সের ক্রস-প্ল্যাটফর্ম সংমিশ্রণ, যা ভাষা সংক্রান্ত কাজগুলোকে আরও স্বয়ংক্রিয়ভাবে করতে সক্ষম।
NLP এর মাধ্যমে, কম্পিউটার ভাষাগত ডেটা যেমন টেক্সট বা স্পিচ থেকে তথ্য সংগ্রহ, বিশ্লেষণ এবং উত্তরের জন্য মডেল তৈরি করতে সক্ষম হয়।
NLP এর মূল উদ্দেশ্য হলো কম্পিউটারকে মানুষের ভাষা (যেমন ইংরেজি, বাংলা, হিন্দি ইত্যাদি) বুঝতে এবং প্রক্রিয়া করতে সক্ষম করা। এটি ভাষাগত উপাদানগুলি যেমন শব্দ, বাক্য, এবং প্রসঙ্গের মধ্যকার সম্পর্ক বিশ্লেষণ করে।
"আমি ভালো আছি"
কে টোকেনাইজ করলে ["আমি", "ভালো", "আছি"]
হবে।NLP হল এমন একটি প্রযুক্তি যা কম্পিউটারকে মানুষের ভাষা বুঝতে, বিশ্লেষণ করতে এবং ব্যবহারিক কাজ সম্পাদন করতে সাহায্য করে। এর ব্যবহার প্রায় প্রতিটি ক্ষেত্রে রয়েছে, যেমন ভাষা অনুবাদ, চ্যাটবট, স্পিচ টু টেক্সট, টেক্সট ক্লাসিফিকেশন ইত্যাদি। NLP আমাদের কম্পিউটার এবং মানুষের মধ্যে আরো সহজ ও স্বাভাবিক যোগাযোগ প্রতিষ্ঠা করতে সাহায্য করছে।
টেক্সট প্রিপ্রসেসিং (Text Preprocessing) মেশিন লার্নিং এবং প্রাকৃতিক ভাষা প্রক্রিয়াকরণের (Natural Language Processing, NLP) একটি গুরুত্বপূর্ণ অংশ। এটি মূলত ডেটা পরিষ্কার এবং প্রস্তুত করার জন্য বিভিন্ন কৌশল ব্যবহার করে, যাতে মডেল আরও সঠিকভাবে কাজ করতে পারে। টোকেনাইজেশন (Tokenization) এবং প্যাডিং (Padding) দুইটি প্রধান প্রিপ্রসেসিং কৌশল যা টেক্সট ডেটা প্রস্তুত করতে ব্যবহৃত হয়।
টোকেনাইজেশন হল টেক্সট ডেটাকে ছোট ছোট ইউনিট বা অংশে ভাগ করার প্রক্রিয়া। এই ইউনিটগুলোকে টোকেন বলা হয়। টোকেনগুলি সাধারণত শব্দ, বাক্যাংশ বা অক্ষর হতে পারে এবং এগুলি NLP মডেলগুলির ইনপুট হিসেবে ব্যবহৃত হয়।
টোকেনাইজেশন টেক্সট ডেটাকে ছোট ছোট একক (টোকেন) এ বিভক্ত করে, যেমন:
ধরা যাক, আপনার কাছে একটি টেক্সট "I love machine learning."।
['I', 'love', 'machine', 'learning']
['I', ' ', 'l', 'o', 'v', 'e', ' ', 'm', 'a', 'c', 'h', 'i', 'n', 'e', ' ', 'l', 'e', 'a', 'r', 'n', 'i', 'n', 'g', '.']
টোকেনাইজেশন এর সুবিধা:
প্যাডিং একটি টেক্সট প্রিপ্রসেসিং কৌশল যেখানে ইনপুট সিকোয়েন্সের দৈর্ঘ্য সমান করা হয়। টেক্সট ডেটার প্রতিটি সিকোয়েন্সের দৈর্ঘ্য সাধারণত ভিন্ন হয়, এবং অধিকাংশ মডেল সমান দৈর্ঘ্যের ইনপুট নেয়। তাই ছোট সিকোয়েন্সগুলিকে নির্দিষ্ট দৈর্ঘ্যের করতে প্যাডিং ব্যবহার করা হয়।
প্যাডিং সিকোয়েন্সগুলির মধ্যে কোন একটি নির্দিষ্ট দৈর্ঘ্য নিশ্চিত করে, এবং এটি মূলত ছোট সিকোয়েন্সের শেষে 0
বা অন্য কোনো প্যাডিং ভ্যালু যোগ করে।
ধরা যাক, আপনার সিকোয়েন্সগুলি নিম্নরূপ:
['I love NLP']
(দৈর্ঘ্য: 3)['I love machine learning']
(দৈর্ঘ্য: 4)এখন যদি আমরা একটি সর্বোচ্চ দৈর্ঘ্য নির্ধারণ করি, যেমন 5, তবে প্যাডিং এর মাধ্যমে:
['I love NLP', 0]
['I love machine learning']
(এটি প্রথমেই প্যাড করা যাবে না, কারণ এটি 5-এর সমান)এখানে, আপনি একটি নির্দিষ্ট দৈর্ঘ্য বজায় রাখতে 0
(বা অন্য কোনো ভ্যালু) যোগ করছেন।
প্যাডিং এর সুবিধা:
এখন, আমরা একটি সাধারণ টেক্সট প্রিপ্রসেসিং উদাহরণ দেখবো যেখানে টোকেনাইজেশন এবং প্যাডিং উভয়ই করা হবে:
import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# উদাহরণ টেক্সট ডেটা
texts = ["I love machine learning", "Deep learning is amazing", "I love NLP"]
# টোকেনাইজেশন
tokenizer = Tokenizer()
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
# প্যাডিং
padded_sequences = pad_sequences(sequences, padding='post', maxlen=6)
# ফলাফল
print("Tokenized Sequences:", sequences)
print("Padded Sequences:", padded_sequences)
Tokenized Sequences: [[1, 2, 3, 4], [5, 3, 6, 7], [1, 2, 8]]
Padded Sequences: [[1, 2, 3, 4, 0, 0], [5, 3, 6, 7, 0, 0], [1, 2, 8, 0, 0, 0]]
এখানে:
0
দিয়ে পূর্ণ করা হয়েছে।LSTM (Long Short-Term Memory) এবং GRU (Gated Recurrent Unit) হল রিকারেন্ট নিউরাল নেটওয়ার্ক (RNN) এর উন্নত সংস্করণ যা সিকোয়েন্সাল ডেটা যেমন টেক্সট, সময় সিরিজ, বা অন্যান্য সিকোয়েন্সের উপর কাজ করতে সক্ষম। এই দুটি আর্কিটেকচার মেমরি সমস্যাগুলি সমাধান করে, যেমন দীর্ঘস্থায়ী নির্ভরতা (long-term dependencies), এবং সুতরাং টেক্সট ক্লাসিফিকেশন এর জন্য খুবই কার্যকর।
Adam
বা RMSprop
ব্যবহার করুন।sparse_categorical_crossentropy
বা বাইনারি ক্লাসিফিকেশনের জন্য binary_crossentropy
ব্যবহার করতে পারেন।accuracy
মেট্রিক ব্যবহার করা হয়।import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, GRU, Dense, Embedding, Dropout
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from sklearn.model_selection import train_test_split
# 1. টেক্সট ডেটা প্রিপ্রসেসিং
texts = ["This is a positive example.", "This is a negative example.", "Another positive one.", "Negative text."]
labels = [1, 0, 1, 0] # 1=positive, 0=negative
# টোকেনাইজেশন
tokenizer = Tokenizer(num_words=10000)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
data = pad_sequences(sequences, padding='post')
# 2. মডেল তৈরির জন্য ইনপুট ডেটা প্রস্তুত
X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2)
# 3. LSTM বা GRU মডেল তৈরি
model = Sequential()
model.add(Embedding(input_dim=10000, output_dim=128, input_length=data.shape[1]))
model.add(LSTM(64, return_sequences=False)) # অথবা GRU(64)
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid')) # বাইনারি ক্লাসিফিকেশন
# 4. মডেল কম্পাইলিং
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 5. মডেল ট্রেনিং
model.fit(X_train, y_train, epochs=5, batch_size=32, validation_data=(X_test, y_test))
যেহেতু GRU কম্পিউটেশনের জন্য অপেক্ষাকৃত সস্তা, এটি ছোট ডেটাসেটে দ্রুত ট্রেনিং করতে পারে, তবে LSTM কিছু ক্ষেত্রে আরো ভালো পারফরম্যান্স দিতে পারে যখন ডেটার মধ্যে দীর্ঘস্থায়ী নির্ভরতা থাকে।
LSTM এবং GRU মডেলগুলি টেক্সট ক্লাসিফিকেশন এবং অন্যান্য সিকোয়েন্সাল টাস্কের জন্য অত্যন্ত কার্যকরী। LSTM বা GRU মডেল ব্যবহার করে আপনি সিকোয়েন্স ডেটা যেমন টেক্সট থেকে গূঢ় তথ্য বের করতে পারেন, যা আপনার ক্লাসিফিকেশন টাস্কের জন্য গুরুত্বপূর্ণ।
ওয়ার্ড এমবেডিংস (Word Embeddings) হলো একটি টেকনিক যা শব্দগুলিকে ভেক্টর আকারে উপস্থাপন করতে ব্যবহার করা হয়, যাতে শব্দের মধ্যে সেমান্টিক বা অর্থনৈতিক সম্পর্ক সহজে ধরা পড়ে। এটি প্রাকৃতিক ভাষা প্রক্রিয়াকরণের (NLP) একটি গুরুত্বপূর্ণ অংশ, যা ভাষাগত ডেটা প্রক্রিয়াকরণের জন্য অত্যন্ত কার্যকরী। Word2Vec এবং GloVe দুটি জনপ্রিয় ওয়ার্ড এমবেডিং মডেল।
Word2Vec হলো একটি মেশিন লার্নিং অ্যালগরিদম যা শব্দগুলোকে ভেক্টরে রূপান্তরিত করতে ব্যবহৃত হয়। এটি গুগল দ্বারা তৈরি করা হয়েছিল এবং এর মাধ্যমে শব্দগুলির মধ্যে সেমান্টিক সম্পর্ক বা পারস্পরিক সম্পর্ক বোঝা যায়। Word2Vec দুটি পদ্ধতি ব্যবহার করে:
GloVe হল একটি ম্যাট্রিক্স ফ্যাক্টরাইজেশন ভিত্তিক মডেল যা শব্দগুলির সহ-অবস্থান তথ্য (co-occurrence information) ব্যবহার করে তাদের এমবেডিং তৈরি করে। এটি শব্দের জ্ঞানী সম্পর্ক (semantic relationships) শেখার জন্য একটি পরিসংখ্যান ভিত্তিক পদ্ধতি।
GloVe মডেলটি একটি সহ-অবস্থান ম্যাট্রিক্স তৈরি করে, যেখানে প্রতিটি কোষে একটি নির্দিষ্ট শব্দের পরিসংখ্যান তথ্য থাকে, যেমন একটি শব্দ অন্য শব্দের সাথে কতবার উপস্থিত হয়েছে। এরপর এই ম্যাট্রিক্সকে ফ্যাক্টরাইজ করা হয়, এবং শব্দগুলির জন্য একটি কনটেক্সট ভিত্তিক এমবেডিং তৈরি করা হয়।
আপনি Gensim লাইব্রেরি ব্যবহার করে সহজে Word2Vec মডেল তৈরি করতে পারেন।
# Gensim লাইব্রেরি ইনস্টল করুন
!pip install gensim
from gensim.models import Word2Vec
# কিছু টেক্সট ডেটা
sentences = [
["i", "love", "machine", "learning"],
["deep", "learning", "is", "amazing"],
["word", "embeddings", "are", "powerful"]
]
# Word2Vec মডেল ট্রেন করা
model = Word2Vec(sentences, vector_size=50, window=3, min_count=1, sg=0)
# "learning" শব্দের এমবেডিং পাওয়া
vector = model.wv['learning']
print(vector)
# "machine" এবং "learning" এর মধ্যে সেমান্টিক সম্পর্ক পরীক্ষা করা
similarity = model.wv.similarity('machine', 'learning')
print(similarity)
vector_size
: এমবেডিং এর সাইজ।window
: কনটেক্সট উইন্ডোর আকার।min_count
: শব্দটির মিনিমাম ফ্রিকোয়েন্সি, যার নিচে শব্দগুলি ট্রেন করা হবে না।sg=0
: CBOW মডেল, 1 হলে Skip-Gram মডেল।GloVe মডেল ব্যবহার করতে GloVe Python Wrapper বা glove-python
লাইব্রেরি ব্যবহার করা যেতে পারে, তবে সবচেয়ে সহজ উপায় হল pretrained GloVe embeddings ব্যবহার করা, যা GloVe official website থেকে ডাউনলোড করা যায়।
# GloVe এমবেডিং লোড করা
from gensim.models.keyedvectors import KeyedVectors
# Pre-trained GloVe মডেল লোড করা
model = KeyedVectors.load_word2vec_format("glove.6B.50d.txt", binary=False)
# "learning" শব্দের এমবেডিং পাওয়া
vector = model['learning']
print(vector)
# "machine" এবং "learning" এর মধ্যে সেমান্টিক সম্পর্ক পরীক্ষা করা
similarity = model.similarity('machine', 'learning')
print(similarity)
এখানে "glove.6B.50d.txt" হল GloVe এর 50 ডাইমেনশনাল প্রিট্রেইনড এমবেডিং।
Word2Vec এবং GloVe হল দুটি শক্তিশালী ওয়ার্ড এমবেডিং প্রযুক্তি যা শব্দগুলির মধ্যে সেমান্টিক সম্পর্ক গঠন করে। Word2Vec কনটেক্সট-ভিত্তিক ট্রেনিং পদ্ধতি ব্যবহার করে এবং GloVe শব্দগুলির সহ-অবস্থান তথ্য থেকে শেখে। এই দুটি মডেল ব্যবহার করে আপনি আপনার প্রাকৃতিক ভাষা প্রক্রিয়াকরণ (NLP) কাজগুলিতে উন্নত ফলাফল অর্জন করতে পারেন, যেমন: ভাষা মডেল তৈরি, টেক্সট ক্লাসিফিকেশন, এবং শব্দ সম্পর্ক বিশ্লেষণ।
Sentiment Analysis এবং Sequence Prediction দুইটি গুরুত্বপূর্ণ টাস্ক যা ডিপ লার্নিং এবং মেশিন লার্নিংয়ে ব্যাপকভাবে ব্যবহৃত হয়। এগুলি বিশেষত প্রাকৃতিক ভাষা প্রক্রিয়াকরণ (NLP) এর ক্ষেত্রে গুরুত্বপূর্ণ। টেনসরফ্লো ব্যবহার করে এই টাস্কগুলো করতে পারে, যেখানে সাধারণত রিকারেন্ট নিউরাল নেটওয়ার্ক (RNN), লং শর্ট-টার্ম মেমরি (LSTM) বা গ্রেডিয়েন্ট বুস্টিং প্রযুক্তি ব্যবহৃত হয়।
এখন, আসুন এই দুটি টাস্ক সম্পর্কে বিস্তারিত আলোচনা করি:
Sentiment Analysis হল একটি প্রক্রিয়া যার মাধ্যমে একটি টেক্সট ডেটার মধ্যে মানুষ বা লেখকের অনুভূতি বা মনোভাব শনাক্ত করা হয়। সাধারণত এটি তিনটি শ্রেণীতে ভাগ করা হয়:
Sentiment Analysis করার জন্য সাধারণত লম্বা সিকোয়েন্স ডেটা থাকে, যেমন টেক্সটের বাক্য বা প্যারাগ্রাফ। এই ধরনের ডেটার জন্য LSTM বা GRU (Gated Recurrent Units) ব্যবহার করা হয়।
কোড উদাহরণ:
import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# টেক্সট ডেটা
sentences = [
"I love this product",
"This is the worst thing I have ever bought",
"I am very happy with my purchase",
"I will never buy this again"
]
# টোকেনাইজেশন
tokenizer = Tokenizer(num_words=100)
tokenizer.fit_on_texts(sentences)
sequences = tokenizer.texts_to_sequences(sentences)
# প্যাডিং
padded_sequences = pad_sequences(sequences, padding='post')
# সেন্টিমেন্ট এনালাইসিস মডেল
model = tf.keras.Sequential([
tf.keras.layers.Embedding(input_dim=100, output_dim=64, input_length=len(padded_sequences[0])),
tf.keras.layers.LSTM(128),
tf.keras.layers.Dense(1, activation='sigmoid')
])
# মডেল কম্পাইল
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# মডেল ট্রেনিং (যেমন: X_train, y_train)
model.fit(padded_sequences, y_train, epochs=5)
এই কোডটি সাধারণ সেন্টিমেন্ট বিশ্লেষণের জন্য একটি LSTM মডেল তৈরি করে, যা টেক্সট ডেটার অনুভূতি বা মনোভাব নির্ধারণ করতে সক্ষম।
Sequence Prediction হল একটি প্রক্রিয়া যেখানে পূর্ববর্তী সিকোয়েন্স ডেটা ব্যবহার করে ভবিষ্যতের সিকোয়েন্স বা মানের পূর্বাভাস করা হয়। এটি সময় সিরিজ ডেটা বা যেকোনো ধরনের ক্রমবর্ধমান ডেটার জন্য ব্যবহৃত হয়।
এক্ষেত্রে সাধারণত RNN, LSTM, বা GRU ব্যবহার করা হয়। এই মডেলগুলি সময়ভিত্তিক বা সিকোয়েন্স ডেটা ভালোভাবে প্রক্রিয়া করতে সক্ষম।
কোড উদাহরণ:
import numpy as np
import tensorflow as tf
# টাইম সিরিজ ডেটা (যেমন স্টক প্রাইস)
data = np.array([10, 20, 30, 40, 50, 60])
# সিকোয়েন্স তৈরি করা
def create_sequences(data, sequence_length):
X = []
y = []
for i in range(len(data) - sequence_length):
X.append(data[i:i+sequence_length])
y.append(data[i+sequence_length])
return np.array(X), np.array(y)
sequence_length = 3
X, y = create_sequences(data, sequence_length)
# LSTM মডেল
model = tf.keras.Sequential([
tf.keras.layers.LSTM(50, activation='relu', input_shape=(X.shape[1], 1)),
tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse')
# মডেল ট্রেনিং
X = X.reshape(X.shape[0], X.shape[1], 1) # LSTM এর জন্য 3D ইনপুট আকারে রূপান্তর
model.fit(X, y, epochs=200)
# ভবিষ্যতের মান পূর্বাভাস
predicted = model.predict(X[-1].reshape(1, sequence_length, 1))
print(predicted)
এই কোডটি একটি LSTM মডেল ব্যবহার করে একটি সিকোয়েন্স (যেমন স্টক প্রাইস) থেকে ভবিষ্যত মানের পূর্বাভাস দেয়।
Read more